﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CANO.Data.DAOs
{
	public class TipoPropiedadDAO
	{
		public int TipoPropiedadID { get; set; }
		public string TipoPropiedad { get; set; }

		public static List<TipoPropiedadDAO> getAll()
		{
			List<TipoPropiedadDAO> listTipoPropiedad = new List<TipoPropiedadDAO>();

			using (dcCanoDataContext context = new dcCanoDataContext())
			{

				var tipoPropiedadCollection =
					from tp in context.TipoPropiedads
					select tp;

				foreach (var item in tipoPropiedadCollection)
				{
					TipoPropiedadDAO tipoPropiedad = new TipoPropiedadDAO();
					tipoPropiedad.TipoPropiedadID = item.TipoPropiedadID;
					tipoPropiedad.TipoPropiedad = item.TipoPropiedad1;
					listTipoPropiedad.Add(tipoPropiedad);
				}
				return listTipoPropiedad;
			}
		}

		public static void create(string TipoPropiedad)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				TipoPropiedad newTipoPropiedad = new TipoPropiedad();
				newTipoPropiedad.TipoPropiedad1 = TipoPropiedad;
				newTipoPropiedad.TipoPropiedadID = getId();

				context.TipoPropiedads.InsertOnSubmit(newTipoPropiedad);
				context.SubmitChanges();
			}
		}
		public static int createNew(string TipoPropiedad)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				TipoPropiedad newTipoPropiedad = new TipoPropiedad();
				newTipoPropiedad.TipoPropiedad1 = TipoPropiedad;
				newTipoPropiedad.TipoPropiedadID = getId();

				context.TipoPropiedads.InsertOnSubmit(newTipoPropiedad);
				context.SubmitChanges();
				return newTipoPropiedad.TipoPropiedadID;
			}
		}
		private static int getId()
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				var tipoPropiedadColl =
					from tp in context.TipoPropiedads
					select tp.TipoPropiedadID;

				return tipoPropiedadColl.Max() + 1;
			}
		}

		public static int? GetIdByName(string propiedadToValidate)
		{
			using (dcCanoDataContext context = new dcCanoDataContext())
			{
				var propiedadColl =
					(from e in context.TipoPropiedads
					 where e.TipoPropiedad1 == propiedadToValidate
					 select e);

				return propiedadColl.Single().TipoPropiedadID;
			};
		}

        public static TipoPropiedad GetById(int TipoPropiedadId)
        {
            using (dcCanoDataContext context = new dcCanoDataContext())
            {

                var tpropiedad =(
                    from tp in context.TipoPropiedads
                    where tp.TipoPropiedadID == TipoPropiedadId
                    select tp).SingleOrDefault();


                TipoPropiedad tipoPropiedad = new TipoPropiedad();
                tipoPropiedad.TipoPropiedadID = tpropiedad.TipoPropiedadID;
                tipoPropiedad.TipoPropiedad1 = tpropiedad.TipoPropiedad1;
                
                return tipoPropiedad;

            }
        }

        public static void Update(TipoPropiedadDAO tpUpdate)
        {
            using (dcCanoDataContext context = new dcCanoDataContext())
            {
                var tp =
                    (from t in context.TipoPropiedads
                     where t.TipoPropiedadID == tpUpdate.TipoPropiedadID
                     select t).Single();

                tp.TipoPropiedad1 = tpUpdate.TipoPropiedad;

                context.SubmitChanges();
            }
        }

        public static int Delete(int tpUpdateId)
        {
            try
            {
                using (dcCanoDataContext context = new dcCanoDataContext())
                {
                    var tp =
                        (from t in context.TipoPropiedads
                         where t.TipoPropiedadID == tpUpdateId
                         select t).Single();

                    context.TipoPropiedads.DeleteOnSubmit(tp);
                    context.SubmitChanges();
                    return 1;
                }
            }
            catch (Exception)
            {
                return 0;
            }
        }
	}
}
